﻿#pragma once
#define _CRT_SECURE_NO_WARNINGS

#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>


typedef char BTDataType;
//二叉链
typedef struct BinaryTreeNode {
	BTDataType data;//当前结点值域
	struct BinaryTreeNode* left;//指向当前结点左孩子
	struct BinaryTreeNode* right;//指向当前结点右孩子
}BTNode;

//前序遍历 -- 根左右
void PreOrder(BTNode* root);
//中序遍历 -- 左根右
void InOrder(BTNode* root);
//后序遍历 -- 左右根
void PostOrder(BTNode* root);

// ⼆叉树结点个数 -- 有效结点个数
int BinaryTreeSize(BTNode* root);
// ⼆叉树叶⼦结点个数
int BinaryTreeLeafSize(BTNode* root);
// ⼆叉树第k层结点个数 
int BinaryTreeLevelKSize(BTNode* root, int k);
//⼆叉树的深度/⾼度
int BinaryTreeDepth(BTNode* root);
// ⼆叉树查找值为x的结点 
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
// ⼆叉树销毁
void BinaryTreeDestory(BTNode** root);

//层序遍历
void LevelOrder(BTNode* root);

// 判断⼆叉树是否是完全⼆叉树
bool BinaryTreeComplete(BTNode* root);